package com.zzs.common.security.service;

import com.zzs.common.core.enums.UserRole;

/**
 * Token 服务接口，提供基于 JWT 和 Redis 的用户身份管理。
 * @date 2025/03/17
 * @author zzs
 */
public interface TokenService {
    /**
     * 生成 Token，并在 Redis 中存储用户角色并设置过期时间
     * @param userId   用户 ID
     * @param userRole 用户角色
     * @return 生成的 Token
     */
    String createToken(long userId, UserRole userRole);

    /**
     * 根据用户 ID 获取用户角色
     *
     * @param userId 用户 ID
     * @return 用户角色，参考 {@link UserRole}
     */
    int getUserRole(long userId);

    /**
     * 解析 Authorization 头部的 JWT，获取用户 ID。
     * 如果token过期或非法，抛出异常
     * @param authHeader Authorization 头部
     * @return 用户 ID
     */
    long getUserId(String authHeader);

    /**
     * 刷新 Redis 过期时间，并生成新的 Token
     *
     * @param userId 用户 ID
     * @return 新的 Token
     */
    String refreshCacheAndCreateNewToken(long userId);

    /**
     * 删除 Redis 中用户的 Token 记录
     *
     * @param userId 用户 ID
     */
    void removeCache(long userId);

    /**
     * 获取 JWT 剩余有效时间
     *
     * @param authHeader Authorization 头部
     * @return 剩余时间（毫秒）
     */
    long getRemainingTime(String authHeader);
}
